/* eslint-disable @typescript-eslint/no-unused-vars */
/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
import { AbstractClient } from "../../../common/abstract_client"
import { ClientConfig } from "../../../common/interface"
import {
  SaleParam,
  DescribeLicenseResponse,
  VerifyLicenseRequest,
  License,
  Filter,
  VerifyLicenseResponse,
  DescribeLicenseRequest,
} from "./cloudapp_models"

/**
 * cloudapp client
 * @class
 */
export class Client extends AbstractClient {
  constructor(clientConfig: ClientConfig) {
    super("cloudapp.tencentcloudapi.com", "2022-05-30", clientConfig)
  }

  /**
   * 从软件进程读取 LICENSE。
   */
  async VerifyLicense(
    req?: VerifyLicenseRequest,
    cb?: (error: string, rep: VerifyLicenseResponse) => void
  ): Promise<VerifyLicenseResponse> {
    return this.request("VerifyLicense", req, cb)
  }

  /**
     * # DescribeLicense

客户根据请求的参数获取当前名下的许可证信息

```json
{
  "Filters": [
    {
      "Name": "QueryType",
      "Values": ["IncludeAddition"]
    }
  ]
}
```

返回的内容结构如下：

- Response.RequestId 为当前请求的唯一 id
- Response.Token 为 license 信息 jwt 加密后的 token 串

```json
{
  "Response": {
    "RequestId": "cd15813b-adff-460e-b9fc-64579e96412d",
    "Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjkzMjQ4MTc5ODAsImlhdCI6MTc1NjE3Nzk4MCwiaXNzIjoibGljZW5zZS1zZXJ2aWNlIiwicGF5bG9hZCI6eyJNYWluTGljZW5zZSI6eyJMaWNlbnNlTW9kZSI6IlN1YnNjcmlwdGlvbiIsIkJpbGxpbmdNb2RlIjoxLCJDcmVhdGVTb3VyY2UiOiJTTjE3MTk0MDc1NDc0SEJETSIsIkF1dGhvcml6ZWRDbG91ZGFwcFJvbGVJZCI6IjcwMDAwMTgzMzgwNiIsIkF1dGhvcml6ZWRDbG91ZGFwcElkIjoiY2xvdWRhcHAtc2V3ZWM2cHMiLCJBdXRob3JpemVkVXNlclVpbiI6IjcwMDAwMDkxODE1NiIsIkxpZmVTcGFuVW5pdCI6IlkiLCJMaWZlU3BhbiI6MzY1LCJTb2Z0d2FyZVBhY2thZ2VJZCI6InBrZy0xZ2xlaG9tNyIsIlNvZnR3YXJlUGFja2FnZVZlcnNpb24iOiIwLjAuMSIsIkF1dGhvcml6ZWRTcGVjaWZpY2F0aW9uIjpbeyJQYXJhbUtleSI6InZlcnNpb24iLCJQYXJhbUtleU5hbWUiOiLniYjmnKwiLCJQYXJhbVZhbHVlIjoiYmFzaWMiLCJQYXJhbVZhbHVlTmFtZSI6IuWfuuehgOeJiCJ9LHsiUGFyYW1LZXkiOiJzaXplIiwiUGFyYW1LZXlOYW1lIjoi6KeE5qC8IiwiUGFyYW1WYWx1ZSI6IjEwMCIsIlBhcmFtVmFsdWVOYW1lIjoiMTAw5Lq66KeE5qihIn1dLCJQcm92aWRlcklkIjoxMDAwMDAwNzEsIlByb3ZpZGVyVWluIjoiNzAwMDAwOTE4MTU2IiwiSXNzdWVEYXRlIjoiMjAyNC0wNi0yNlQyMToxMjozMiswODowMCIsIkFjdGl2YXRpb25EYXRlIjoiMjAyNC0wNi0yNlQyMToxMjozNSswODowMCIsIkV4cGlyYXRpb25EYXRlIjoiMjM4OS0wNi0yNlQyMToxMjozNSswODowMCIsIkxpY2Vuc2VTdGF0dXMiOiJBY3RpdmUiLCJMaWNlbnNlSWQiOiI3MDAwMDA5MTgxNTY6cGtnLTFnbGVob203OmNsb3VkYXBwLXNld2VjNnBzOjgwMDciLCJMaWNlbnNlVHlwZSI6IlN0YW5kYXJkIiwiTGljZW5zZUxldmVsIjoiTWFzdGVyIn0sIkFkZGl0aW9uTGljZW5zZXMiOltdLCJUaW1lc3RhbXAiOiIyMDI1LTA4LTI2VDExOjEzOjAwKzA4OjAwIn19.G8Lx49xZBW0Rh3lRA15XzZ-PzLJj0bAxwnklx0pTjrHWxqxQdETAdGfU_QaGI_WZfYh2IVbFcwHnRLiRj6pQb4guCMpCbcsgL28BRS4g1wnaFhjcyEQLLtpDdz4_lPnOR2VHHvnfwhLZtccAgsRpeedPMBK1hwO9D3WKisQg2LcIr0V-QB8gmgIqqyqrLW6z37QpjgB4ZyJ5bIC1J-0-VmghskA04xnQRPdGJtlyBhjzVjeDxBq5JOqm3Am0Nqu1jyTd3MuYgSRwJqkDyjVBOGFGGy6mZCIYnxU_ET6-0ZEendqYwXDkpYG4rZZv5YmRCXiSESYz0zx4czwmFWkw-TjRSvUQBxBfsoDcAgyzpY7zBOTnbrr7DyoMvVnnHo7vb0if8_vkub6o0MuRnvdDYxNJtnTtlIScCadWAIvWUQ1DlUw2kzS-h9Ju2h7JhKw9cUeutu0X_6V4arZu9JlgWT9Ns7BtS9Y5JxgQOd36Aan39Rwohy_BrVwjOkbvDuTFLc_yNUlNdq5T2GNbDjABCmi73CGhCuWyPgtRs4ftpPugDRrTe4E95F224jdhf7I0He-nY4i1MoVjz8Zzm4v0vH67cMfcu0XVhs7ywvmu5tBSwm0uuhAXFFIbSrgEzuadxNhSi6qVCFNLnjiPYplK1M9mxG8Hc-fU-0A0TPepx8Q"
  }
}
```

验签过程：
对 Response.Token 内容使用公钥进行解码转换得到许可结构体信息，返回的内容结构如下，其中 paylod 中的信息为许可证信息结构：

```json
{
  "exp": 9324758169,
  "iat": 1756118169,
  "iss": "license-service",
  "payload": {
    "MainLicense": {
      "LicenseMode": "Subscription",
      "BillingMode": 1,
      "CreateSource": "SN1719406931EJJ1E",
      "AuthorizedCloudappRoleId": "700001833621",
      "AuthorizedCloudappId": "cloudapp-992nqg9u",
      "AuthorizedUserUin": "700001833621",
      "LifeSpanUnit": "Y",
      "LifeSpan": 365,
      "SoftwarePackageId": "pkg-1glehom7",
      "SoftwarePackageVersion": "0.0.1",
      "AuthorizedSpecification": [
        {
          "ParamKey": "version",
          "ParamKeyName": "版本",
          "ParamValue": "basic",
          "ParamValueName": "基础版"
        },
        {
          "ParamKey": "size",
          "ParamKeyName": "规格",
          "ParamValue": "100",
          "ParamValueName": "100 人规模"
        }
      ],
      "ProviderId": 100000071,
      "ProviderUin": "700000918156",
      "IssueDate": "2024-06-26T21:02:16+08:00",
      "ActivationDate": "2024-06-26T21:02:19+08:00",
      "ExpirationDate": "2389-06-26T21:02:19+08:00",
      "LicenseStatus": "Active",
      "LicenseId": "700000918156:pkg-1glehom7:cloudapp-992nqg9u:3988",
      "LicenseType": "Standard",
      "LicenseLevel": "Master"
    },
    "AdditionLicenses": [
      {
        "LicenseMode": "Subscription",
        "BillingMode": 1,
        "CreateSource": "SN1719406931EJJ1E",
        "AuthorizedCloudappRoleId": "700001833621",
        "AuthorizedCloudappId": "cloudapp-992nqg9u",
        "AuthorizedUserUin": "700001833621",
        "LifeSpanUnit": "Y",
        "LifeSpan": 365,
        "SoftwarePackageId": "pkg-1glehom7",
        "SoftwarePackageVersion": "0.0.1",
        "AuthorizedSpecification": [
          {
            "ParamKey": "version",
            "ParamKeyName": "版本",
            "ParamValue": "basic",
            "ParamValueName": "基础版"
          },
          {
            "ParamKey": "size",
            "ParamKeyName": "规格",
            "ParamValue": "100",
            "ParamValueName": "100 人规模"
          }
        ],
        "ProviderId": 100000071,
        "ProviderUin": "700000918156",
        "IssueDate": "2024-06-26T21:02:16+08:00",
        "ActivationDate": "2024-06-26T21:02:19+08:00",
        "ExpirationDate": "2389-06-26T21:02:19+08:00",
        "LicenseStatus": "Active",
        "LicenseId": "700000918156:pkg-1glehom7:cloudapp-992nqg9u:3988",
        "LicenseType": "Standard",
        "LicenseLevel": "Master"
      }
    ],
    "Timestamp": "2025-08-25T18:36:09+08:00"
  }
}
```
     */
  async DescribeLicense(
    req: DescribeLicenseRequest,
    cb?: (error: string, rep: DescribeLicenseResponse) => void
  ): Promise<DescribeLicenseResponse> {
    return this.request("DescribeLicense", req, cb)
  }
}
